--ACMTA10000000E8

set xact_abort on;
go

alter table Articulo drop
  constraint FKF28D6EF3FFCACBBF ;
go


begin transaction;
go

drop table CondicionTrabajoEquipo;
go



create table DetalleIngreso(
  Id                         int           not null identity primary key,
  Cantidad                   int           not null,
  Partes                     nvarchar(255),
  Consumibles                nvarchar(255),
  ObservacionesMantenimiento nvarchar(255),
  Articulo_id                int           not null,
  CondicionEquipo_id         int           not null,
  Ingreso_id                 int
);
go

alter table DetalleIngreso add
  constraint FK70448760A995F4BF foreign key(Articulo_id) references Articulo(Id),
  constraint FK70448760FFCACBBF foreign key(CondicionEquipo_id) references CondicionEquipo(Id);
go

create table DetalleSalida(
  Id                         int           not null identity primary key,
  Cantidad                   int           not null,
  Partes                     nvarchar(255),
  Consumibles                nvarchar(255),
  ObservacionesMantenimiento nvarchar(255),
  Salida_id                  int           not null,
  Articulo_id                int           not null,
  CondicionEquipo_id         int           not null
);
go

alter table DetalleSalida add
  constraint FKF57E0B63A995F4BF foreign key(Articulo_id) references Articulo(Id),
  constraint FKF57E0B63FFCACBBF foreign key(CondicionEquipo_id) references CondicionEquipo(Id);
go

create table EntregaEquipo(
  Id               int not null identity primary key,
  Cantidad         int not null,
  DetalleSalida_id int not null,
  Trabajador_id    int not null
);
go

alter table EntregaEquipo add
  constraint FKF87261D9E41F057 foreign key(DetalleSalida_id) references DetalleSalida(Id),
  constraint FKF87261D66E47C4B foreign key(Trabajador_id) references Trabajador(Id);
go

create table Ingreso(
  Id                int           not null identity primary key,
  Fecha             datetime      not null,
  NumeroFactura     nvarchar(50)  not null,
  NumeroGuia        nvarchar(50)  not null,
  Ubicacion         nvarchar(255),
  TipoMovimiento_id int           not null,
  Proveedor_id      int           not null,
  Almacen_id        int,
  Proyecto_id       int,
  Lote_id           int,
  Lugar_id          int
);
go

alter table Ingreso add
  constraint FK1C3C49933B1552FB foreign key(Proveedor_id) references Proveedor(Id),
  constraint FK1C3C49931C68C0E3 foreign key(Almacen_id) references Almacen(Id),
  constraint FK1C3C4993255A76FF foreign key(Proyecto_id) references Proyecto(Id),
  constraint FK1C3C49933CAA3C2F foreign key(Lote_id) references Lote(Id),
  constraint FK1C3C4993A92C043 foreign key(Lugar_id) references Lugar(Id);
go

create table Periodo(
  Id          int           not null identity primary key,
  Fecha       datetime      not null unique,
  Descripcion nvarchar(100) not null,
  Cerrado     bit           not null,
  Estado      nvarchar(1)   not null
);
go

create table TipoTrabajoTareo(
  Id          int           not null identity primary key,
  Codigo      nvarchar(15)  not null,
  Descripcion nvarchar(100) not null,
  Estado      nvarchar(1)   not null
);
go

create table Salida(
  Id                int           not null identity primary key,
  Fecha             datetime      not null,
  NumeroGuia        nvarchar(50)  not null,
  OrdenServicio     nvarchar(50)  not null,
  Ubicacion         nvarchar(255),
  TipoMovimiento_id int           not null,
  Proveedor_id      int           not null,
  Almacen_id        int,
  Proyecto_id       int,
  Lote_id           int,
  Lugar_id          int
);
go

alter table Salida add
  constraint FK400DD75A255A76FF foreign key(Proyecto_id) references Proyecto(Id),
  constraint FK400DD75A3CAA3C2F foreign key(Lote_id) references Lote(Id),
  constraint FK400DD75AA92C043 foreign key(Lugar_id) references Lugar(Id),
  constraint FK400DD75A3B1552FB foreign key(Proveedor_id) references Proveedor(Id),
  constraint FK400DD75A1C68C0E3 foreign key(Almacen_id) references Almacen(Id);
go

create table Tareo(
  Id               int      not null identity primary key,
  Fecha            datetime not null,
  TipoTrabajoTareo int      not null,
  Trabajador_id    int      not null,
  Proyecto_id      int      not null,
  Lote_id          int      not null,
  Lugar_id         int,

  unique(Fecha,Trabajador_id)
);
go

alter table Tareo add
  constraint FK95F45EB166E47C4B foreign key(Trabajador_id) references Trabajador(Id),
  constraint FK95F45EB1255A76FF foreign key(Proyecto_id) references Proyecto(Id),
  constraint FK95F45EB13CAA3C2F foreign key(Lote_id) references Lote(Id),
  constraint FK95F45EB1A92C043 foreign key(Lugar_id) references Lugar(Id);
go

create table TipoMovimiento(
  Id                 int           not null identity primary key,
  Codigo             nvarchar(14)  not null unique,
  Descripcion        nvarchar(100) not null,
  TipoEntradaOSalida int           not null,
  EntregaAPersonal   bit           not null,
  Mantenimiento      bit           not null,
  Estado             nvarchar(1)   not null
);
go

alter table Articulo drop
  column CondicionEquipo_id;
go



alter table Salida add
  constraint FK400DD75A9050A6C7 foreign key(TipoMovimiento_id) references TipoMovimiento(Id);
go

alter table Ingreso add
  constraint FK1C3C49939050A6C7 foreign key(TipoMovimiento_id) references TipoMovimiento(Id);
go

alter table DetalleSalida add
  constraint FKF57E0B631C37BEF7 foreign key(Salida_id) references Salida(Id);
go

alter table DetalleIngreso add
  constraint FK70448760F031AA3F foreign key(Ingreso_id) references Ingreso(Id);
go

alter table Contrato drop
  constraint FK2362691E66E47C4B ,
  constraint FK2362691EC5EB8423 ,
  constraint FK2362691E255A76FF ,
  constraint FK2362691E3CAA3C2F ,
  constraint FK2362691E7D52D597 ,
  constraint FK2362691E2B8029E7 ,
  constraint FK2362691EF5E158D3 ;
go

exec sp_rename 'Contrato', 'tmp__Contrato_0', 'OBJECT';
go

create table Contrato(
  Id                      int           not null identity primary key,
  Sueldo                  float         not null,
  FechaInicioContrato     datetime      not null,
  FechaTerminoContrato    datetime      not null,
  FechaIngresoCampo       datetime,
  FechaSalidaCampo        datetime,
  Observaciones           nvarchar(255),
  FechaLiquidacion        datetime,
  ObservacionesRenovacion nvarchar(255),
  Estado                  nvarchar(255) not null,
  Usuario                 nvarchar(50),
  Trabajador_id           int           not null,
  Empresa_id              int           not null,
  Proyecto_id             int           not null,
  Lote_id                 int           not null,
  TipoCargo_id            int           not null,
  StatusContrato_id       int           not null,
  MotivoLiquidacion_id    int
);
go

alter table Contrato add
  constraint FK2362691E7D52D597 foreign key(TipoCargo_id) references TipoCargo(Id),
  constraint FK2362691E2B8029E7 foreign key(StatusContrato_id) references StatusContrato(Id),
  constraint FK2362691EF5E158D3 foreign key(MotivoLiquidacion_id) references MotivoLiquidacion(Id),
  constraint FK2362691E66E47C4B foreign key(Trabajador_id) references Trabajador(Id),
  constraint FK2362691EC5EB8423 foreign key(Empresa_id) references Empresa(Id),
  constraint FK2362691E255A76FF foreign key(Proyecto_id) references Proyecto(Id),
  constraint FK2362691E3CAA3C2F foreign key(Lote_id) references Lote(Id);
go

set identity_insert Contrato on;
go

insert into Contrato(Id,Sueldo,FechaInicioContrato,FechaTerminoContrato,FechaIngresoCampo,FechaSalidaCampo,Observaciones,FechaLiquidacion,ObservacionesRenovacion,Estado,Usuario,Trabajador_id,Empresa_id,Proyecto_id,Lote_id,TipoCargo_id,StatusContrato_id,MotivoLiquidacion_id) select Id,Sueldo,FechaInicioContrato,FechaTerminoContrato,FechaIngresoCampo,FechaSalidaCampo,Observaciones,FechaLiquidacion,ObservacionesRenovacion,Estado,Usuario,Trabajador_id,Empresa_id,Proyecto_id,Lote_id,TipoCargo_id,StatusContrato_id,MotivoLiquidacion_id from tmp__Contrato_0;
go

set identity_insert Contrato off;
go

drop table tmp__Contrato_0;
go

set ANSI_NULLS on;
go

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
create PROCEDURE USP_CREAR_FECHA_TAREO
	@FechaTareo Datetime
AS
BEGIN
SET NOCOUNT ON

INSERT INTO [Tareo]
           ([Fecha]
           ,[Trabajador_id]
           ,[Proyecto_id]
           ,[Lote_id]
           ,[Lugar_id]
           ,[TipoTrabajoTareo])
        SELECT @FechaTareo,t.Id,p.Id,l.Id, null, null
                 from contrato c 
                 inner join trabajador t on c.Trabajador_id = t.Id
                 inner join proyecto p on c.Proyecto_Id = p.Id
                 inner join lote l on c.Lote_Id = l.Id
        where c.estado = 'A'

        select @@ROWCOUNT

SET NOCOUNT OFF
END
go

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
create PROCEDURE USP_DUPLICAR_FECHA_TAREO
	@FechaADuplicar Datetime,
	@FechaNueva Datetime
AS
BEGIN
SET NOCOUNT ON

INSERT INTO [Tareo]
           ([Fecha]
           ,[Trabajador_id]
           ,[Proyecto_id]
           ,[Lote_id]
           ,[Lugar_id]
           ,[TipoTrabajoTareo])
        (SELECT @FechaNueva,Trabajador_id,Proyecto_id,Lote_id,Lugar_id,TipoTrabajoTareo
        FROM tareo WITH (NOLOCK)
        where fecha = @FechaADuplicar)
       
        
        select @@ROWCOUNT

SET NOCOUNT OFF
END
go

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
create PROCEDURE USP_CONSULTA_TAREO
@Apellidos nvarchar(75),
@Nombres nvarchar(25),
@idProyecto int,
@idLote int,
@idLugar int,
@FechaDesde Datetime,
@FechaHasta DateTime
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
       Select Codigo,
              ApellidosYNombres,
              Proyecto,
              Lote,
              Lugar,
              sum(case when TipoTrabajoTareo = 1 then 1 else 0 end) as DiasTrabajados,
              sum(case when TipoTrabajoTareo = 2 then 1 else 0 end) as DiasDescansados,
              sum(case when TipoTrabajoTareo = 3 then 1 else 0 end) as DiasEnTransito,
              sum(case when TipoTrabajoTareo = 3 then 1 else 0 end) as DiasDeVacaciones,
              sum(1) as DiasTotal
       from (Select trabajador.Codigo as Codigo, 
       trabajador.Apellidos + ', ' + trabajador.Nombres as ApellidosYNombres,
       proyecto.codigo + ' - ' + proyecto.descripcion as Proyecto,
       lote.codigo + ' - ' + lote.descripcion as Lote,
       lugar.codigo + ' - ' + lugar.descripcion as Lugar,
       TipoTrabajoTareo
       from tareo
         inner join trabajador on tareo.Trabajador_id = trabajador.Id
         inner join proyecto on tareo.Proyecto_id = proyecto.Id
         inner join lote on tareo.Lote_id = lote.Id
         inner join lugar on tareo.Lugar_id = lugar.Id
         where 
            (trabajador.Apellidos like  @Apellidos + '%' or @Apellidos is null)   
       AND  (trabajador.Nombres like  @Nombres + '%' or @Nombres is null) 
       AND  (proyecto.Id = @idProyecto or @idProyecto is null) 
       AND  (lote.Id = @idLote or @idLote is null)         
       AND  (lugar.Id = @idLugar or @idLugar is null)         
       AND  (tareo.Fecha between @FechaDesde and @FechaHasta)    
       ) as T
       group by Codigo,ApellidosYNombres,Proyecto,Lote,Lugar

       SET NOCOUNT OFF;
END
go

commit;
go
